/**
 * 2018/6/29 10:07:19 Wen Jun created.
 */

package com.diver.flinkdemo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.diver.flinkdemo.entity.xxt.Message;
import com.diver.flinkdemo.entity.xxt.TerminalUnit;
import com.diver.flinkdemo.entity.xxt.User;
import com.diver.flinkdemo.mapper.mysqlMapper.MessageMapper;
import com.diver.flinkdemo.service.IMessageService;
import com.diver.flinkdemo.utils.DateUtil;
import com.diver.flinkdemo.utils.FlinkThreadUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * 推送消息表 Service 实现
 * Created by Wen Jun on 2018/06/29.
 */
//@Service
public class MessageService extends ServiceImpl<MessageMapper, Message> implements IMessageService {
    private static final Logger log = LoggerFactory.getLogger(MessageService.class);

    //FlinkThreadUtil threadUtil = new FlinkThreadUtil();

    @Override
    public void setMessage(TerminalUnit terminalUnit, Long nowTime, String latitude, String longitude, Integer type, String electricity, String address, String mac) {
        /*log.info("触发模板消息推送 ————————————————————————，{}", terminalUnit);
        try {
            List<TerminalUnit> studentCardList = new ArrayList<>();
            studentCardList.add(terminalUnit);
            //学生的手机卡告警，推送通知相关教职工
            if ("1".equals(studentCard.getPersonType()) &&
                    (StuCardTypeEnum.HJX.getType().equals(studentCard.getCardType())
                            || StuCardTypeEnum.SJK.getType().equals(studentCard.getCardType()))) {
                List<StudentCard> studentCards = authClient.findStudentCardsByCondition(studentCard.getSchoolId(), studentCard.getGradeId(), studentCard.getClassId(), null, "3");
//                studentCards.forEach(s->s.setName(studentCard.getName()));
                log.info("获取相关相关教职工信息 start————————————————————————，{}", JSONArray.toJSONString(studentCards));
                if (studentCards.size() > 0) {
                    for (StudentCard s2 : studentCards) {
                        s2.setName(studentCard.getName());
                        s2.setImei(studentCard.getImei());
                    }
                    studentCardList.addAll(studentCards);
                }
                log.info("获取相关相关教职工信息 end————————————————————————，{}", JSONArray.toJSONString(studentCards));

            }
            dealWithPushTemplateMsg(studentCardList, nowTime, latitude, longitude, type, electricity, address, mac);
        } catch (Exception e) {
            log.error("err", e);
        }
        threadUtil.sendMessage();*/
    }

    @Override
    public void setHealthMessage(String studentCardId, String name, Long nowTime, Integer heartData, Integer bpSystolic, Integer bpDiastolic, String sno, Integer type, String address, Double btT) {

    }

    @Override
    public void setRemindMessage(String studentCardId, String name, Long nowTime, Integer type, String remindType, String url) {

    }

    @Override
    public Message setGuardSettingMessage(String studentCardId, String name, String latitude, String longitude, Long nowTime, Integer type, String address, String mac) {
        return null;
    }

    @Override
    public void setUnbindMessage(String personType, String content1, String time, User u) {

    }

    @Override
    public void sendGuardSettingTemplateJob(Message m) {

    }

    @Override
    public List<Message> getMessage(String studentCardId) {
        return null;
    }

    @Override
    public void sendRemindTemplate(List<User> users, Message message, String url) {
        String content1 = message.getContent();// 通知内容
        Long time = message.getPushTime();//消息的时间
        // 需要发送给企业微信用户的 id list
        List<String> qyUserids = new ArrayList<>();
        String t = DateUtil.long2String(time);
        /*for (User u : users) {
            log.info("进入模板消息发送接口，userid：{}，nickName:{}", u.getId(), u.getNickName());
            String accountId = u.getAccountId();
            if (BindChannelEnum.XXT.getBindChannel().equals(accountId)) {
                //TODO 调用设备平台接口判断用户是否为海象用户
                String walrusFlag = u.getWalrusFlag();
                if (StringUtils.isEmpty(walrusFlag) || "0".equals(walrusFlag)) {
                    if (BindChannelEnum.WALRUS.getBindChannel().equals(channel)) {
                        log.info("海象C40用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
                        u.setWalrusFlag("1");
                        authClient.updateUserInfo(u);
                        boolean result = doSendWalrusTemplate(content1, t, u, url);
                        continue;
                    } else if (BindChannelEnum.TLJY.getBindChannel().equals(channel)) {
                        log.info("天立教育C40用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
                        boolean flag = doSendTLRemindTemplate(message, t, u, url);
                        continue;
                    } else {
                        log.info("xxtC40用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
                        boolean flag = doSendXxtRemindTemplate(message, t, u, url);
                        continue;
                    }
                } else if ("1".equals(walrusFlag)) {
                    log.info("海象用户C40微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
                    boolean result = doSendWalrusTemplate(content1, t, u, url);
                    continue;
                }

//                精创移交逻辑
//                log.info("xxt用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                boolean flag = doSendXxtTemplate(content1, t, u);
//                continue;
            } else if (BindChannelEnum.QY_WX.getBindChannel().equals(accountId)) {
                // 企业微信用户
                log.info("企业微信用户消息1，userid：{}", u.getId());
                qyUserids.add(u.getExternalUserid());
            } else if (BindChannelEnum.CD_TELECOM.getBindChannel().equals(accountId)) {//推送到产创平台
                pushMessageToCDTelecom(u.getOpenId(), content1, time);
            } else if (BindChannelEnum.SC_TELECOM_LZ.getBindChannel().equals(accountId)) {//推送到乐智平台
                pushMessageToLZ(u.getOpenId(), message.getStudentCardId(), content1);
            } else if (BindChannelEnum.SC_TELECOM_SZT.getBindChannel().equals(accountId)) {//推送到省中台
                pushMessageToSZT(u, message);
            } else {
                log.info("其他用户不发1，{} {}", u.getId(), u.getNickName());
            }

//            if(!flag){
//                //重试一次
//                log.info("{} {} 发送失败重试一次", u.getId(), u.getNickName());
//                doSendTemplate(content1, t, u);
//            }
        }*/

        if (CollectionUtils.isNotEmpty(qyUserids)) {
            // 发送
            log.info("企业微信消息 {}, {}", qyUserids, content1);
            //authClient.sendQyMessage(qyUserids, content1);
        }
    }

//
//    private static final String HEAR_RATE_MESSAGE = "%s在%s监测到心率异常，心率为%s次/分钟，请及时关注~";
//    private static final String BLOOD_MESSAGE = "%s在%s监测到血压异常，收缩压为%s mmHg，舒张压为%s mmHg，请及时关注~";
//    private static final String TEMP_MESSAGE = "%s在%s监测到体温异常，体温为%s 摄氏度，请及时关注~";
//    private static final String SOS_MESSAGE = "%s在%s按了紧急求助按钮，当时在%s，请及时关注!";
//    private static final String SOS_MESSAGE_NO_LOCATION = "%s在%s按了紧急求助按钮，请及时关注!";
//    private static final String DEVIATION_MESSAGE = "%s于%s在上学/放学途中偏离了日常轨迹，当时在%s，请及时关注!";
//    private static final String DEVIATION_MESSAGE_old = "%s于%s在行走途中偏离了日常轨迹，当时在%s，请及时关注!";
//    private static final String LONG_STAY_MESSAGE = "%s截止到%s已在%s附近停留了超过30分钟，请及时关注！";
//    private static final String LEAVE_SAFE_AREA_MESSAGE = "%s离开了安全区域，当前位置在%s附近,请及时关注！";
//    private static final String BACK_SAFE_AREA_MESSAGE = "%s进入了安全区域，当前位置在%s";
//    private static final String LOW_ELECTRICITY_MESSAGE = "%s的终端电量为%s，为不影响使用，请及时充电";
//    private static final String LOW_ELECTRICITY_MESSAGE_FIFTY = "%s的终端电量为%s，请您关注终端电量";
//    private static final String IN_DANGER_MESSAGE = "%s进入疫情确诊区域,当前在%s，请及时关注!";
//    private static final String LEAVE_DANGER_MESSAGE = "%s离开疫情确诊区域,当前在%s，请及时关注!";
//    private static final String POWER_OFF_MESSAGE = "%s的终端即将关机，请及时关注！";
//    private static final String INSTRUCTIONS_ISSUED_ERROR_MESSAGE = "您向%s的学生证下发的%s指令失败，可能是当前设备网络异常导致的，请检查设备电量或网络状态后重试";
//    private static final String INSTRUCTIONS_ISSUED_ERROR_MESSAGE_old = "您向%s的老年证下发的%s指令失败，可能是当前设备网络异常导致的，请检查设备电量或网络状态后重试";
//    private static final String SMS_COLLECTION_MESSAGE = "%s的学生证收到一条短信，请您及时查看！";
//    private static final String SMS_COLLECTION_MESSAGE_old = "%s的老年证收到一条短信，请您及时查看！";
//    private static final String LEAVE_HOME_AREA_MESSAGE = "%s已经离开家，持续上学守护中！当前位置：%s";
//    private static final String NOT_LEAVE_HOME_AREA_MESSAGE = "%s未出发前往学校，当前位置：%s";
//    private static final String ARRIVE_SCHOOL_AREA_MESSAGE = "%s已经到达学校，当前位置：%s";
//    private static final String NOT_ARRIVE_SCHOOL_AREA_MESSAGE = "%s已经迟到，请及时提醒宝贝。当前位置：%s";
//    private static final String LEAVE_SCHOOL_AREA_MESSAGE = "%s已经离开学校，持续上学守护中！当前位置：%s";
//    private static final String NOT_LEAVE_SCHOOL_AREA_MESSAGE = "%s未离开学校，当前位置：%s";
//    private static final String ARRIVE_HOME_AREA_MESSAGE = "%s已经回到家，当前位置：%s";
//    private static final String NOT_ARRIVE_HOME_AREA_MESSAGE = "%s目前还没有回到家，当前位置：%s";
//    private static final String DEV_IS_ONLINE_MESSAGE = "上学守护已开启， 当前设备%s已经离线，无法为您持续守护";
//
//    private ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(10,
//            new BasicThreadFactory.Builder().namingPattern("templateJob-%d").daemon(false).build());
//
//    //模版消息发送url
//    private static final String TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
//
//    private static final String WX_TOKEN_KEY = "WX:TOKEN";
//
////    @Autowired
//    private PropsConfig propsConfig;
//
////    @Value("${template-id}")
//    private String templateId;
//
////    @Value("${template-redirect-url}")
//    private String templateRedirectUrl;
//
////    @Value("${xxt-template-id}")
//    private String xxtTemplateId;
//
////    @Value("${xxt-template-redirect-url}")
//    private String xxtTemplateRedirectUrl;
//
////    @Value("${tl-template-id}")
//    private String tlTemplateId;
//
////    @Value("${walrus-template-id}")
//    private String walrusTemplateId;
//
////    @Value("${xxt-remind-template-id}")
//    private String xxtRemindTemplateId;
//
////    @Value("${tl-remind-template-id}")
//    private String tlRemindTemplateId;
//
////    @Value("${xxt-guardSetting-template-id}")
//    private String xxtGuardSettingTemplateId;
//
////    @Value("${tl-guardSetting-template-id}")
//    private String tlGuardSettingTemplateId;
//
////    @Autowired
//    private IHttpService httpService;
//
////    @Autowired
//    private IMessageDao messageDao;
//
////    @Autowired
//    private MessageMapper messageMapper;
//
////    @Autowired
//    IRedisService redisService;
//
////    @Autowired
//    private IWeChatService weChatService;
//
////    @Autowired
//    private AuthClient authClient;
//
////    @Autowired
//    private GetTLSignUtil getTLSignUtil;
//
////    @Override
//    public IIbatisDataProvider<Message, String> getModelDao() {
//        return this.messageDao;
//    }
//
////    @Override
//    public void setMessage(StudentCard studentCard, Long nowTime, String latitude,
//                           String longitude, Integer type, String electricity, String address, String mac) {
//        log.info("触发模板消息推送 ————————————————————————，{}", studentCard);
//        try {
//            List<StudentCard> studentCardList = new ArrayList<>();
//            studentCardList.add(studentCard);
//            //学生的手机卡告警，推送通知相关教职工
//            if ("1".equals(studentCard.getPersonType()) &&
//                    (StuCardTypeEnum.HJX.getType().equals(studentCard.getCardType())
//                            || StuCardTypeEnum.SJK.getType().equals(studentCard.getCardType()))) {
//                List<StudentCard> studentCards = authClient.findStudentCardsByCondition(studentCard.getSchoolId(), studentCard.getGradeId(), studentCard.getClassId(), null, "3");
////                studentCards.forEach(s->s.setName(studentCard.getName()));
//                log.info("获取相关相关教职工信息 start————————————————————————，{}", JSONArray.toJSONString(studentCards));
//                if(studentCards.size() > 0){
//                    for(StudentCard s2: studentCards){
//                        s2.setName(studentCard.getName());
//                        s2.setImei(studentCard.getImei());
//                    }
//                    studentCardList.addAll(studentCards);
//                }
//                log.info("获取相关相关教职工信息 end————————————————————————，{}", JSONArray.toJSONString(studentCards));
//
//            }
//            dealWithPushTemplateMsg(studentCardList, nowTime, latitude, longitude, type, electricity, address, mac);
//        } catch (Exception e) {
//            log.error("err", e);
//        }
//
//    }
//
//    @Override
//    public void setHealthMessage(String studentCardId, String name, Long nowTime, Integer heartData, Integer bpSystolic, Integer bpDiastolic, String sno, Integer type, String address, Double btT) {
//        try {
//            Message message = new Message();
//            message.setId(UUIDUtil.uuid());
//            message.setStudentCardId(studentCardId);
//            message.setDeleteFlag(0);
//            message.setIsRead(0);
//            message.setHeartData(heartData);
//            message.setBpSystolic(bpSystolic);
//            message.setBpDiastolic(bpDiastolic);
//            message.setBtT(btT);
//            message.setSno(sno);
//            message.setType(type);
//            message.setPushTime(nowTime);
//            message.setCreateTime(System.currentTimeMillis());
//            String addressName = getAddress(address, message);
//            message.setAdressName(addressName);
//            String content = fillMessageContent(message, name, addressName, "");
//            message.setContent(content);
//            messageDao.insertObject(message);
//
//            log.info("--->2");
//            executorService.submit(new sendTemplateJob(message));
////            executorService.submit(new SendXxtTemplateJob(message, address, name));
//        } catch (Exception e) {
//            log.error("err", e);
//        }
//    }
//
//    @Override
//    public void setRemindMessage(String studentCardId, String name, Long nowTime, Integer type, String remindType, String url) {
//        Message message = new Message();
//        message.setId(UUIDUtil.uuid());
//        message.setStudentCardId(studentCardId);
//        message.setDeleteFlag(0);
//        message.setIsRead(0);
//        message.setPushTime(nowTime);
//        message.setCreateTime(System.currentTimeMillis());
//        message.setType(type);
//        message.setContent(fillMessageContent(message, name, "", remindType));
//        messageDao.insertObject(message);
//        sendRemindTemplateJob(message, url);
//    }
//
//    @Override
//    public Message setGuardSettingMessage(String studentCardId, String name, String latitude,String longitude,Long nowTime, Integer type, String address,String mac) {
//        log.info("上学守护模板消息推送 —————— {}", studentCardId);
//        log.info("线程fegin-" + Thread.currentThread().getId());
//        String stuName = StringUtils.isBlank(name) ? studentCardId : name;
//        Message message = new Message();
//        message.setId(UUIDUtil.uuid());
//        message.setStudentCardId(studentCardId);
//        message.setDeleteFlag(0);
//        message.setIsRead(0);
//        message.setType(type);
//        message.setLatitude(latitude);
//        message.setLongitude(longitude);
//        message.setPushTime(nowTime);
//        message.setCreateTime(System.currentTimeMillis());
//        String addressName = getAddress(address, message);
//        message.setAdressName(addressName);
//        if(StringUtils.isNotBlank(mac)) {
//            if(mac.length() > 10) {
//                mac = "WIFI";
//            } else if("0".equals(mac)) {
//                mac = "GPS";
//            }
//            if("BASE".equals(mac)) {
//                addressName = addressName + "(基站定位，精度500米)";
//            } else if("WIFI".equals(mac)) {
//                addressName = addressName + "(WIFI定位，精度50米)";
//            } else if("GPS".equals(mac)) {
//                addressName = addressName + "(GPS定位，精度10米)";
//            }
//        }
//        String content = fillMessageContent(message, stuName, addressName, "");
//        message.setContent(content);
//        messageDao.insertObject(message);
//        return message;
//    }
//
//    @Override
//    public void setUnbindMessage(String personType, String content1, String time, User u) {
//        doSendXxtTemplate(personType, content1, time, u);
//    }
//
//
//    @Override
//    public List<Message> getMessage(String studentCardId) {
//        List<Message> list = messageMapper.queryMessageByStudentCardId(studentCardId);
//        if (list.isEmpty()) {
//            return null;
//        }
//        for (int i = 0; i < list.size(); i++) {
//            //将提示信息标为已读
//            list.get(i).setIsRead(1);
//            list.get(i).setUpdateTime(System.currentTimeMillis());
//            messageDao.updateObject(list.get(i));
//        }
//        return list;
//    }
//
//    /**
//     * 处理模板消息告警推送
//     *
//     * @param studentCardList
//     * @param nowTime
//     * @param latitude
//     * @param longitude
//     * @param type
//     * @param electricity
//     * @param address
//     */
//    private void dealWithPushTemplateMsg(List<StudentCard> studentCardList, Long nowTime, String latitude,
//                                         String longitude, Integer type, String electricity, String address, String mac) {
//        log.info("处理模板消息告警推送 —————— {}", JSONArray.toJSONString(studentCardList));
//        for (StudentCard studentCard : studentCardList) {
//            String name = StringUtils.isBlank(studentCard.getName()) ? studentCard.getImei() : studentCard.getName();
//            Message message = new Message();
//            message.setId(UUIDUtil.uuid());
//            message.setStudentCardId(studentCard.getId());
//            message.setPersonType(studentCard.getPersonType());
//            message.setDeleteFlag(0);
//            message.setIsRead(0);
//            message.setLatitude(latitude);
//            message.setLongitude(longitude);
//            message.setType(type);
//            message.setPushTime(nowTime);
//            message.setCreateTime(System.currentTimeMillis());
//            String addressName = getAddress(address, message);
//            message.setAdressName(addressName);
//            message.setElectricity(electricity);
//            if(StringUtils.isNotBlank(mac)) {
//                if(mac.length() > 10) {
//                    mac = "WIFI";
//                } else if("0".equals(mac)) {
//                    mac = "GPS";
//                }
//                if("BASE".equals(mac)) {
//                    addressName = addressName + "(基站定位，精度500米)";
//                } else if("WIFI".equals(mac)) {
//                    addressName = addressName + "(WIFI定位，精度50米)";
//                } else if("GPS".equals(mac)) {
//                    addressName = addressName + "(GPS定位，精度10米)";
//                }
//            }
//            String content = fillMessageContent(message, name, addressName, "");
//            message.setContent(content);
//            messageDao.insertObject(message);
//
//            executorService.submit(new sendTemplateJob(message));
//            log.info("模板消息告警推送 —————— {}", JSONObject.toJSONString(message));
//            //executorService.submit(new SendXxtTemplateJob(message, address, name));
//        }
//    }
//
//
//    class sendTemplateJob implements Runnable {
//        private Message message;
//
//
//        public sendTemplateJob(Message message) {
//            this.message = message;
//        }
//
//        @Override
//        public void run() {
//            log.info("---->1");
//            String sutdentCardId = message.getStudentCardId();
//            List<User> users = authClient.getUsersByCardId(sutdentCardId);
//            if (null == users || users.isEmpty()) {
//                log.error("发送用户 null 无需发送");
//                return;
//            }
//            //发送模板消息
//            sendTemplate(users, message);
//        }
//    }
//
//
//    @Async("sendRemindTemplateExecutor")
//    public void sendRemindTemplateJob(Message message, String url) {
//        log.info("线程-" + Thread.currentThread().getId() + "在执行发送C40模板消息");
//        try {
//            String sutdentCardId = message.getStudentCardId();
//            List<User> users = authClient.getUsersByCardId(sutdentCardId);
//            if (null == users || users.isEmpty()) {
//                log.error("发送用户 null 无需发送");
//                return;
//            }
//            //发送模板消息
//            sendRemindTemplate(users, message, url);
//        } catch (Exception e) {
//            log.info(e.getMessage());
//        }
//    }
//
//    @Override
//    @Async("sendRemindTemplateExecutor")
//    public void sendGuardSettingTemplateJob(Message message) {
//        log.info("线程-" + Thread.currentThread().getId() + "在执行发送上学守护消息推送");
//        try {
//            String sutdentCardId = message.getStudentCardId();
//            List<User> users = authClient.getUsersByCardId(sutdentCardId);
//            if (null == users || users.isEmpty()) {
//                log.error("发送用户 null 无需发送");
//                return;
//            }
//            //发送模板消息
//            sendGuardSettingTemplate(users, message);
//        } catch (Exception e) {
//            log.info(e.getMessage());
//        }
//    }
//
//    public void sendGuardSettingTemplate(List<User> users, Message message) {
//        String content1 = message.getContent();// 告警内容
//        Long time = message.getPushTime();//消息的时间
//        Integer type = message.getType();
//        // 需要发送给企业微信用户的 id list
//        List<String> qyUserids = new ArrayList<>();
//        String t = DateUtil.long2String(time);
//        for (User u : users) {
//            log.info("进入上学守护模板消息发送接口，userid：{}，nickName:{}", u.getId(), u.getNickName());
//            String accountId = u.getAccountId();
//            if (BindChannelEnum.XXT.getBindChannel().equals(accountId)) {
//                //TODO 调用设备平台接口判断用户是否为海象用户
//                String walrusFlag = u.getWalrusFlag();
//                if (StringUtils.isEmpty(walrusFlag) || "0".equals(walrusFlag)) {
//                    String jcApiGetChannelNameURL = propsConfig.getJcApiGetChannelName();
//                    HashMap<String, String> param = new HashMap<>();
//                    param.put("imei", message.getStudentCardId());
////                    String s = HttpUrlClient.doPostToFacility(jcApiGetChannelNameURL, param, "UTF-8");
//                    ResultConfig<String> responseResult = httpService.doPost(jcApiGetChannelNameURL, null, param, "UTF-8");
//                    String channel = "";
//                    if (responseResult.getResultCode() == 200) {
//                        String s = responseResult.getResultData();
//                        log.info("调用设备平台接口查询该imei渠道，userid：{}，nickName:{}，imei:{},返回结果:{}", u.getId(), u.getNickName(), message.getStudentCardId(), s);
//                        if (!StringUtils.isEmpty(s)) {
//                            JSONObject jsonObject = JSONObject.parseObject(s);
//                            String code = jsonObject.getString("code");
//                            if ("1".equals(code)) {
//                                channel = jsonObject.getString("channel");
//                            }
//                        }
//                    }
//                    if (BindChannelEnum.WALRUS.getChannelName().equals(channel)) {
//                        log.info("海象用户上学守护模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        u.setWalrusFlag("1");
//                        authClient.updateUserInfo(u);
//                        boolean result = doSendWalrusTemplate(content1, t, u, null);
//                        continue;
//                    } else if (BindChannelEnum.TLJY.getChannelName().equals(channel)){
//                        log.info("天立用户上学守护模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        boolean flag = sendTlGuardSettingTemplate(type,content1, t, u);
//                        continue;
//                    }else {
//                        log.info("xxt用户上学守护模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        boolean flag = sendXxtGuardSettingTemplate(type, content1, t, u);
//                        continue;
//                    }
//                } else if ("1".equals(walrusFlag)) {
//                    log.info("海象用户上学守护模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                    boolean result = doSendWalrusTemplate(content1, t, u, null);
//                    continue;
//                }
//
////                精创移交逻辑
////                log.info("xxt用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
////                boolean flag = doSendXxtTemplate(content1, t, u);
////                continue;
//            } else if (BindChannelEnum.QY_WX.getBindChannel().equals(accountId)) {
//                // 企业微信用户
//                log.info("企业微信用户消息1，userid：{}", u.getId());
//                qyUserids.add(u.getExternalUserid());
//            } else if (BindChannelEnum.CD_TELECOM.getBindChannel().equals(accountId)) {//推送到产创平台
//                pushMessageToCDTelecom(u.getOpenId(), content1, time);
//            } else if (BindChannelEnum.SC_TELECOM_LZ.getBindChannel().equals(accountId)) {//推送到乐智平台
//                pushMessageToLZ(u.getOpenId(), message.getStudentCardId(), content1);
//            } else if (BindChannelEnum.SC_TELECOM_SZT.getBindChannel().equals(accountId)) {//推送到省中台
//                pushMessageToSZT(u, message);
//            } else {
//                log.info("其他用户不发1，{} {}", u.getId(), u.getNickName());
//            }
//
////            if(!flag){
////                //重试一次
////                log.info("{} {} 发送失败重试一次", u.getId(), u.getNickName());
////                doSendTemplate(content1, t, u);
////            }
//        }
//
//        if (CollectionUtils.isNotEmpty(qyUserids)) {
//            // 发送
//            log.info("企业微信消息 {}, {}", qyUserids, content1);
//            authClient.sendQyMessage(qyUserids, content1);
//        }
//    }
//
//
//
//
//    /**
//     * 消息 参数填充
//     *
//     * @param message 消息参数
//     * @param name    发送对象 name
//     * @param address 消息 地址信息
//     * @return 填充后的消息
//     * @author yangs
//     */
//    private String fillMessageContent(Message message, String name, String address, String remindType) {
//        int messageType = message.getType();
//        String personType = message.getPersonType();
//        String time = DateUtil.long2String(message.getPushTime());
//
//        if (messageType == MessageEnum.HEAT_RATE_ERR.getType()) {
//            return String.format(HEAR_RATE_MESSAGE, name, time, message.getHeartData());
//
//        } else if (messageType == MessageEnum.BLOOD_ERR.getType()) {
//            return String.format(BLOOD_MESSAGE, name, time, message.getBpSystolic(), message.getBpDiastolic());
//
//        } else if (messageType == MessageEnum.TEMP_ERR.getType()) {
//            return String.format(TEMP_MESSAGE, name, time, message.getBtT());
//        } else if (messageType == MessageEnum.SOS.getType()) {
//            address = getAddress(address, message);
//            if (StringUtils.isBlank(address)) {
//                //没有位置
//                return String.format(SOS_MESSAGE_NO_LOCATION, name, time);
//            }
//            return String.format(SOS_MESSAGE, name, time, address);
//
//        } else if (messageType == MessageEnum.DEVIATIONTRAJECTORY.getType()) {
//            address = getAddress(address, message);
//            if ("2".equals(personType)) {
//                return String.format(DEVIATION_MESSAGE_old, name, time, address);
//            }
//            return String.format(DEVIATION_MESSAGE, name, time, address);
//
//        } else if (messageType == MessageEnum.LONGSTAY.getType()) {
//            address = getAddress(address, message);
//            return String.format(LONG_STAY_MESSAGE, name, time, address);
//
//        } else if (messageType == MessageEnum.LEAVE_SECURITY_AREA.getType()) {
//            address = getAddress(address, message);
//            return String.format(LEAVE_SAFE_AREA_MESSAGE, name, address);
//
//        } else if (messageType == MessageEnum.BACKTO_SECURITY_AREA.getType()) {
//            address = getAddress(address, message);
//            return String.format(BACK_SAFE_AREA_MESSAGE, name, address);
//
//        } else if (messageType == MessageEnum.LOW_ELECTRICITY.getType()) {
//            Integer electricity = Integer.parseInt(message.getElectricity());
//            if (electricity >= 40) {
//                return String.format(LOW_ELECTRICITY_MESSAGE_FIFTY, name, message.getElectricity());
//            }
//            return String.format(LOW_ELECTRICITY_MESSAGE, name, message.getElectricity());
//        } else if (messageType == MessageEnum.LEAVE_DANGER_AREA.getType()) {
//            return String.format(LEAVE_DANGER_MESSAGE, name, address);
//        } else if (messageType == MessageEnum.IN_DANGER_AREA.getType()) {
//            return String.format(IN_DANGER_MESSAGE, name, address);
//        } else if (messageType == MessageEnum.POWER_OFF.getType()) {
//            return String.format(POWER_OFF_MESSAGE, name);
//        }
////        XT-C40新增指令下发及短信验收模板消息
//        else if (messageType == MessageEnum.INSTRUCTIONS_ISSUED_ERROR.getType()) {
//            if ("2".equals(personType)) {
//                return String.format(INSTRUCTIONS_ISSUED_ERROR_MESSAGE_old, name, remindType);
//            }
//            return String.format(INSTRUCTIONS_ISSUED_ERROR_MESSAGE, name, remindType);
//        } else if (messageType == MessageEnum.SMS_COLLECTION.getType()) {
//            if ("2".equals(personType)) {
//                return String.format(SMS_COLLECTION_MESSAGE_old, name);
//            }
//            return String.format(SMS_COLLECTION_MESSAGE, name);
//        } else if (messageType == MessageEnum.LEAVE_HOME_AREA.getType()) {
//            return String.format(LEAVE_HOME_AREA_MESSAGE, name, address);
//        } else if(messageType == MessageEnum.NOT_LEAVE_HOME_AREA.getType()) {
//            return String.format(NOT_LEAVE_HOME_AREA_MESSAGE,name, address);
//        } else if (messageType == MessageEnum.ARRIVE_SCHOOL_AREA.getType()) {
//            return String.format(ARRIVE_SCHOOL_AREA_MESSAGE,name, address);
//        } else if (messageType == MessageEnum.NOT_ARRIVE_SCHOOL_AREA.getType()) {
//            return String.format(NOT_ARRIVE_SCHOOL_AREA_MESSAGE,name, address);
//        } else if (messageType == MessageEnum.LEAVE_SCHOOL_AREA.getType()) {
//            return String.format(LEAVE_SCHOOL_AREA_MESSAGE,name, address);
//        } else if (messageType == MessageEnum.ARRIVE_HOME_AREA.getType()) {
//            return String.format(ARRIVE_HOME_AREA_MESSAGE,name, address);
//        } else if (messageType == MessageEnum.NOT_ARRIVE_HOME_AREA.getType()) {
//            return String.format(NOT_ARRIVE_HOME_AREA_MESSAGE,name, address);
//        }else if (messageType == MessageEnum.DEV_IS_ONLINE.getType() ) {
//            return String.format(DEV_IS_ONLINE_MESSAGE,name);
//        }
//
//        return "";
//    }
//
//    private String getAddress(String address, Message message) {
//        if (StringUtils.isBlank(address)) {
//            if (StringUtils.isBlank(message.getLongitude()) || StringUtils.isBlank(message.getLatitude())
//                    || "0".equals(message.getLongitude()) || "0".equals(message.getLatitude())
//            ) {
//                return "";
//            }
//            address = GaoDeMapUtil.getAddressByLonLat(message.getLongitude(), message.getLatitude());
//            log.info("调用高德地图转换地址，imei：{}，Longitude：{}，Latitude:{},address:{}", message.getStudentCardId(), message.getLongitude(), message.getLatitude(), address);
//        }
//        return address;
//    }
//
//    /**
//     * 发送模版消息 到 每个用户
//     *
//     * @param users   绑定用户列表
//     * @param message
//     * @author yangs
//     */
//    public void sendTemplate(List<User> users, Message message) {
//        String content1 = message.getContent();// 告警内容
//        Long time = message.getPushTime();//消息的时间
//        // 需要发送给企业微信用户的 id list
//        List<String> qyUserids = new ArrayList<>();
//        String t = DateUtil.long2String(time);
//        for (User u : users) {
//            log.info("进入模板消息发送接口，userid：{}，nickName:{}", u.getId(), u.getNickName());
//            String accountId = u.getAccountId();
//            if (BindChannelEnum.XXT.getBindChannel().equals(accountId)) {
//                //TODO 调用设备平台接口判断用户是否为海象用户
//                String walrusFlag = u.getWalrusFlag();
//                if (StringUtils.isEmpty(walrusFlag) || "0".equals(walrusFlag)) {
//                    String jcApiGetChannelNameURL = propsConfig.getJcApiGetChannelName();
//                    HashMap<String, String> param = new HashMap<>();
//                    param.put("imei", message.getStudentCardId());
////                    String s = HttpUrlClient.doPostToFacility(jcApiGetChannelNameURL, param, "UTF-8");
//                    ResultConfig<String> responseResult = httpService.doPost(jcApiGetChannelNameURL, null, param, "UTF-8");
//                    String channel = "";
//                    if (responseResult.getResultCode() == 200) {
//                        String s = responseResult.getResultData();
//                        log.info("调用设备平台接口查询该imei渠道，userid：{}，nickName:{}，imei:{},返回结果:{}", u.getId(), u.getNickName(), message.getStudentCardId(), s);
//                        if (!StringUtils.isEmpty(s)) {
//                            JSONObject jsonObject = JSONObject.parseObject(s);
//                            String code = jsonObject.getString("code");
//                            if ("1".equals(code)) {
//                                channel = jsonObject.getString("channel");
//                            }
//                        }
//                    }
//                    if (BindChannelEnum.WALRUS.getChannelName().equals(channel)) {
//                        log.info("海象用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        u.setWalrusFlag("1");
//                        authClient.updateUserInfo(u);
//                        boolean result = doSendWalrusTemplate(content1, t, u, null);
//                        continue;
//                    } else if (BindChannelEnum.TLJY.getChannelName().equals(channel)){
//                        log.info("天立用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        boolean flag = doSendTLTemplate(content1, t, u, null);
//                        continue;
//                    }else {
//                        log.info("xxt用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        boolean flag = doSendXxtTemplate(message.getPersonType(), content1, t, u);
//                        continue;
//                    }
//                } else if ("1".equals(walrusFlag)) {
//                    log.info("海象用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                    boolean result = doSendWalrusTemplate(content1, t, u, null);
//                    continue;
//                }
//
////                精创移交逻辑
////                log.info("xxt用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
////                boolean flag = doSendXxtTemplate(content1, t, u);
////                continue;
//            } else if (BindChannelEnum.QY_WX.getBindChannel().equals(accountId)) {
//                // 企业微信用户
//                log.info("企业微信用户消息1，userid：{}", u.getId());
//                qyUserids.add(u.getExternalUserid());
//            } else if (BindChannelEnum.CD_TELECOM.getBindChannel().equals(accountId)) {//推送到产创平台
//                pushMessageToCDTelecom(u.getOpenId(), content1, time);
//            } else if (BindChannelEnum.SC_TELECOM_LZ.getBindChannel().equals(accountId)) {//推送到乐智平台
//                pushMessageToLZ(u.getOpenId(), message.getStudentCardId(), content1);
//            } else if (BindChannelEnum.SC_TELECOM_SZT.getBindChannel().equals(accountId)) {//推送到省中台
//                pushMessageToSZT(u, message);
//            } else {
//                log.info("其他用户不发1，{} {}", u.getId(), u.getNickName());
//            }
//
////            if(!flag){
////                //重试一次
////                log.info("{} {} 发送失败重试一次", u.getId(), u.getNickName());
////                doSendTemplate(content1, t, u);
////            }
//        }
//
//        if (CollectionUtils.isNotEmpty(qyUserids)) {
//            // 发送
//            log.info("企业微信消息 {}, {}", qyUserids, content1);
//            authClient.sendQyMessage(qyUserids, content1);
//        }
//    }
//
//
//    /**
//     * 发送模版消息 到 每个用户
//     *
//     * @param users   绑定用户列表
//     * @param message
//     * @author yangs
//     */
//    public void sendRemindTemplate(List<User> users, Message message, String url) {
//        String content1 = message.getContent();// 通知内容
//        Long time = message.getPushTime();//消息的时间
//        // 需要发送给企业微信用户的 id list
//        List<String> qyUserids = new ArrayList<>();
//        String t = DateUtil.long2String(time);
//        for (User u : users) {
//            log.info("进入模板消息发送接口，userid：{}，nickName:{}", u.getId(), u.getNickName());
//            String accountId = u.getAccountId();
//            if (BindChannelEnum.XXT.getBindChannel().equals(accountId)) {
//                //TODO 调用设备平台接口判断用户是否为海象用户
//                String walrusFlag = u.getWalrusFlag();
//                if (StringUtils.isEmpty(walrusFlag) || "0".equals(walrusFlag)) {
//                    String jcApiGetChannelNameURL = propsConfig.getJcApiGetChannelName();
//                    HashMap<String, String> param = new HashMap<>();
//                    param.put("imei", message.getStudentCardId());
////                    String s = HttpUrlClient.doPostToFacility(jcApiGetChannelNameURL, param, "UTF-8");
//                    ResultConfig<String> responseResult = httpService.doPost(jcApiGetChannelNameURL, null, param, "UTF-8");
//                    String channel = "";
//                    if (responseResult.getResultCode() == 200) {
//                        String s = responseResult.getResultData();
//                        log.info("调用设备平台接口查询该imei渠道，userid：{}，nickName:{}，imei:{},返回结果:{}", u.getId(), u.getNickName(), message.getStudentCardId(), s);
//                        if (!StringUtils.isEmpty(s)) {
//                            JSONObject jsonObject = JSONObject.parseObject(s);
//                            String code = jsonObject.getString("code");
//                            if ("1".equals(code)) {
//                                channel = jsonObject.getString("channel");
//                            }
//                        }
//                    }
//                    if (BindChannelEnum.WALRUS.getChannelName().equals(channel)) {
//                        log.info("海象C40用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        u.setWalrusFlag("1");
//                        authClient.updateUserInfo(u);
//                        boolean result = doSendWalrusTemplate(content1, t, u, url);
//                        continue;
//                    } else if (BindChannelEnum.TLJY.getChannelName().equals(channel)){
//                        log.info("天立教育C40用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        boolean flag = doSendTLRemindTemplate(message, t, u, url);
//                        continue;
//                    }else {
//                        log.info("xxtC40用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                        boolean flag = doSendXxtRemindTemplate(message, t, u, url);
//                        continue;
//                    }
//                } else if ("1".equals(walrusFlag)) {
//                    log.info("海象用户C40微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
//                    boolean result = doSendWalrusTemplate(content1, t, u, url);
//                    continue;
//                }
//
////                精创移交逻辑
////                log.info("xxt用户微信模板消息1，userid：{}，nickName:{}", u.getId(), u.getNickName());
////                boolean flag = doSendXxtTemplate(content1, t, u);
////                continue;
//            } else if (BindChannelEnum.QY_WX.getBindChannel().equals(accountId)) {
//                // 企业微信用户
//                log.info("企业微信用户消息1，userid：{}", u.getId());
//                qyUserids.add(u.getExternalUserid());
//            } else if (BindChannelEnum.CD_TELECOM.getBindChannel().equals(accountId)) {//推送到产创平台
//                pushMessageToCDTelecom(u.getOpenId(), content1, time);
//            } else if (BindChannelEnum.SC_TELECOM_LZ.getBindChannel().equals(accountId)) {//推送到乐智平台
//                pushMessageToLZ(u.getOpenId(), message.getStudentCardId(), content1);
//            } else if (BindChannelEnum.SC_TELECOM_SZT.getBindChannel().equals(accountId)) {//推送到省中台
//                pushMessageToSZT(u, message);
//            } else {
//                log.info("其他用户不发1，{} {}", u.getId(), u.getNickName());
//            }
//
////            if(!flag){
////                //重试一次
////                log.info("{} {} 发送失败重试一次", u.getId(), u.getNickName());
////                doSendTemplate(content1, t, u);
////            }
//        }
//
//        if (CollectionUtils.isNotEmpty(qyUserids)) {
//            // 发送
//            log.info("企业微信消息 {}, {}", qyUserids, content1);
//            authClient.sendQyMessage(qyUserids, content1);
//        }
//    }
//
//
//    /**
//     * 发送模版消息
//     *
//     * @param content1 发送的 告警内容
//     * @param time     消息的 时间
//     * @param u        发送到的用户
//     * @return 是否成功
//     * @author yangs
//     */
//    private boolean doSendTemplate(String content1, String time, User u) {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getOpenId());
//        jsonObject.put("template_id", templateId);
//        jsonObject.put("url", templateRedirectUrl);
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        first.put("value", "校芯通终端告警通知");
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("content", content);
//        data.put("occurtime", occurtime);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String params = jsonObject.toJSONString();
//            //log.info("参数:{}", params);
//            string = WechatUtil.sendTemplateMsg(propsConfig.getAppIDErrandDog(), propsConfig.getAppsecretErrandDog(), propsConfig.getTokenManager(), jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//    /**
//     * 校信通消息
//     *
//     * @author yangs
//     */
//    class SendXxtTemplateJob implements Runnable {
//        private Message message;
//        private String address;
//        private String deviceName;
//
//
//        public SendXxtTemplateJob(Message message, String address, String deviceName) {
//            this.message = message;
//            this.address = address;
//            this.deviceName = deviceName;
//        }
//
//        @Override
//        public void run() {
//            sendXxtTemplateToWx(message.getPersonType(), message.getStudentCardId(), message.getContent(), address, deviceName, message.getPushTime());
//        }
//    }
//
//    /**
//     * 发送xxt模版消息 到 每个用户
//     *
//     * @param cardId   学生卡 id
//     * @param content1 发送消息 告警内容
//     * @param time     消息的时间
//     * @author yangs
//     */
//    public void sendXxtTemplateToWx(String personType, String cardId, String content1, String address, String deviceName, Long time) {
//        List<User> users = authClient.getUsersByCardId(cardId);
//        if (null == users || users.isEmpty()) {
//            log.error("发送用户 null 无需发送2");
//            return;
//        }
//
//        String t = DateUtil.long2String(time);
//        for (User u : users) {
//            if (!BindChannelEnum.XXT.getBindChannel().equals(u.getAccountId())) {
//                log.info("{} {}非xxt用户 不发2", u.getId(), u.getNickName());
//                continue;
//            }
//            boolean flag = doSendXxtTemplate(personType, content1, t, u);
////            if(!flag){
////                //重试一次
////                log.info("{} {} 发送失败重试一次", u.getId(), u.getNickName());
////                doSendXxtTemplate(content1, t, u);
////            }
//        }
//    }
//
//    /**
//     * 发送校芯通模版消息
//     *
//     * @param content1 发送的 告警内容
//     * @param time     消息的 时间
//     * @param u        发送到的用户
//     * @return 是否成功
//     * @author yangs
//     */
//    private boolean doSendXxtTemplate(String personType, String content1, String time, User u) {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getOpenId());
//        jsonObject.put("template_id", xxtTemplateId);
//        jsonObject.put("url", xxtTemplateRedirectUrl);
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        if ("2".equals(personType)) {
//            first.put("value", "孝芯通终端告警通知");
//        } else {
//            first.put("value", "校芯通终端告警通知");
//        }
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("content", content);
//        data.put("occurtime", occurtime);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String params = jsonObject.toJSONString();
//            //log.info("参数:{}", params);
//            string = WechatUtil.sendTemplateMsg(propsConfig.getAppID(), propsConfig.getAppsecret(), propsConfig.getTokenManager(), jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//    private boolean sendXxtGuardSettingTemplate(Integer type, String content1, String time, User u) {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getOpenId());
//        jsonObject.put("template_id", xxtGuardSettingTemplateId);
//        jsonObject.put("url", xxtTemplateRedirectUrl);
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        String title = fillGuardSettingMessageTitle(type);
//        first.put("value",title);
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("keyword1", content);
//        data.put("keyword2", occurtime);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//        log.info("--------上学守护消息模板填充完成{}",data);
//
//        String string = null;
//        try {
//            String params = jsonObject.toJSONString();
//            //log.info("参数:{}", params);
//            string = WechatUtil.sendTemplateMsg(propsConfig.getAppID(), propsConfig.getAppsecret(), propsConfig.getTokenManager(), jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//    public boolean sendTlGuardSettingTemplate(Integer type, String content1, String time, User u) {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getWalrusOpenId());
//        jsonObject.put("template_id", tlGuardSettingTemplateId);
//        jsonObject.put("url", xxtTemplateRedirectUrl);
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        String title = fillGuardSettingMessageTitle(type);
//        first.put("value", title);
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("keyword1", content);
//        data.put("keyword2", occurtime);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//        log.info("--------天立上学守护消息模板填充完成{}",data);
//
//        String string = null;
//        try {
//            String tlToken = weChatService.getTLToken();
//            if (StringUtils.isEmpty(tlToken)) {
//                tlToken = weChatService.getTLToken();
//            }
//            string = WechatUtil.sendTLTemplateMsg(getTLSignUtil.appid, getTLSignUtil.secret, tlToken, jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//    public String fillGuardSettingMessageTitle(Integer type) {
//        log.info("-----------进行上学守护消息title填充");
//        String title = "上学守护：";
//
//        if (type == MessageEnum.LEAVE_HOME_AREA.getType()) {
//            title += "离家提醒";
//        }else if (type == MessageEnum.NOT_LEAVE_HOME_AREA.getType()) {
//            title += "未离家提醒";
//        }else if (type == MessageEnum.ARRIVE_HOME_AREA.getType()) {
//            title += "到家提醒";
//        }else if (type == MessageEnum.NOT_ARRIVE_HOME_AREA.getType()) {
//            title += "未到家提醒";
//        } else if (type == MessageEnum.ARRIVE_SCHOOL_AREA.getType()) {
//            title += "到校提醒";
//        }else if (type == MessageEnum.NOT_ARRIVE_SCHOOL_AREA.getType()) {
//            title += "未到校提醒";
//        }else if (type == MessageEnum.LEAVE_SCHOOL_AREA.getType()) {
//            title += "离校提醒";
//        }
//        return title;
//    }
//
//
//    /**
//     * 发送校芯通模版消息
//     *
//     * @param message 发送的 告警内容
//     * @param time    消息的 时间
//     * @param u       发送到的用户
//     * @return 是否成功
//     * @author yangs
//     */
//    private boolean doSendXxtRemindTemplate(Message message, String time, User u, String url) {
//        Integer type = message.getType();
//        String cardId = message.getStudentCardId();
//        StudentCard studentCard = authClient.getStudentCardById(cardId);
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getOpenId());
//        jsonObject.put("template_id", xxtRemindTemplateId);
//        jsonObject.put("url", (StringUtils.isBlank(url) ? xxtTemplateRedirectUrl : url));
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        if (type == MessageEnum.INSTRUCTIONS_ISSUED_ERROR.getType()) {
//            first.put("value", "尊敬的用户，您有一条设备下发动态提醒！");
//        } else if (type == MessageEnum.SMS_COLLECTION.getType()) {
//            first.put("value", "尊敬的用户，您有一条新的短信！");
//        }
//        first.put("color", "#173177");
//        JSONObject keyword1 = new JSONObject();
//        keyword1.put("value", time);
//        keyword1.put("color", "#173177");
//        JSONObject keyword2 = new JSONObject();
//        String personType = message.getPersonType();
//        if ("2".equals(personType)) {
//            keyword2.put("value", "C40S老年证");
//        } else {
//            if (StuCardTypeEnum.XTC40.getType().equals(studentCard.getCardType())) {
//                keyword2.put("value", "C40学生证");
//            }else if (StuCardTypeEnum.XTC2.getType().equals(studentCard.getCardType())) {
//                keyword2.put("value", "C2K1学生证");
//            }
//        }
//        keyword2.put("color", "#173177");
//        JSONObject keyword3 = new JSONObject();
//        keyword3.put("value", message.getContent());
//        keyword3.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("keyword1", keyword1);
//        data.put("keyword2", keyword2);
//        data.put("keyword3", keyword3);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String params = jsonObject.toJSONString();
//            //log.info("参数:{}", params);
//            string = WechatUtil.sendTemplateMsg(propsConfig.getAppID(), propsConfig.getAppsecret(), propsConfig.getTokenManager(), jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//    /**
//     * 发送天立模版消息
//     *
//     * @param content1 发送的 告警内容
//     * @param time     消息的 时间
//     * @param u        发送到的用户
//     * @return 是否成功
//     * @author yangs
//     */
//    private boolean doSendTLTemplate(String content1, String time, User u, String url) {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getWalrusOpenId());
//        jsonObject.put("template_id", tlTemplateId);
//        jsonObject.put("url", (url == null ? xxtTemplateRedirectUrl : url));
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        first.put("value", "天立终端告警通知");
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("content", content);
//        data.put("occurtime", occurtime);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String tlToken = weChatService.getTLToken();
//            if (StringUtils.isEmpty(tlToken)) {
//                tlToken = weChatService.getTLToken();
//            }
//            string = WechatUtil.sendTLTemplateMsg(getTLSignUtil.appid, getTLSignUtil.secret, tlToken, jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//    /**
//     * 发送天立模版提醒消息
//     *
//     * @param message 发送的 告警内容
//     * @param time    消息的 时间
//     * @param u       发送到的用户
//     * @return 是否成功
//     * @author yangs
//     */
//    private boolean doSendTLRemindTemplate(Message message, String time, User u, String url) {
//        Integer type = message.getType();
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getWalrusOpenId());
//        jsonObject.put("template_id", tlRemindTemplateId);
//        jsonObject.put("url", (StringUtils.isBlank(url) ? xxtTemplateRedirectUrl : url));
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        if (type == MessageEnum.INSTRUCTIONS_ISSUED_ERROR.getType()) {
//            first.put("value", "尊敬的用户，您有一条设备下发动态提醒！");
//        } else if (type == MessageEnum.SMS_COLLECTION.getType()) {
//            first.put("value", "尊敬的用户，您有一条新的短信！");
//        }
//        first.put("color", "#173177");
//        JSONObject keyword1 = new JSONObject();
//        keyword1.put("value", time);
//        keyword1.put("color", "#173177");
//        JSONObject keyword2 = new JSONObject();
//        keyword2.put("value", "C40学生证");
//        keyword2.put("color", "#173177");
//        JSONObject keyword3 = new JSONObject();
//        keyword3.put("value", message.getContent());
//        keyword3.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("keyword1", keyword1);
//        data.put("keyword2", keyword2);
//        data.put("keyword3", keyword3);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String tlToken = weChatService.getTLToken();
//            if (StringUtils.isEmpty(tlToken)) {
//                tlToken = weChatService.getTLToken();
//            }
//            string = WechatUtil.sendTLTemplateMsg(getTLSignUtil.appid, getTLSignUtil.secret, tlToken, jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        //log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//
//    /**
//     * 发送海象模版消息
//     *
//     * @param content1 发送的 告警内容
//     * @param time     消息的 时间
//     * @param u        发送到的用户
//     * @return 是否成功
//     * @author zx
//     */
//    private boolean doSendWalrusTemplate(String content1, String time, User u, String url) {
//        JSONObject jsonObject = new JSONObject();
////        TODO 修改表后获取海象公众号OPENID
//        jsonObject.put("touser", u.getWalrusOpenId());
//        jsonObject.put("template_id", walrusTemplateId);
//        jsonObject.put("url", (url == null ? xxtTemplateRedirectUrl : url));
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        first.put("value", "海象终端告警通知");
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first", first);
//        data.put("content", content);
//        data.put("occurtime", occurtime);
//        data.put("remark", remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String walrusToken = weChatService.getWalrusToken();
//            if (StringUtils.isEmpty(walrusToken)) {
//                walrusToken = weChatService.getWalrusToken();
//            }
//            string = WechatUtil.sendWalrusTemplateMsg(propsConfig.getAppIDWalrus(), propsConfig.getAppSecretWalrus(), walrusToken, jsonObject);
//        } catch (Exception e) {
//            log.error("", e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//
//    //推送消息到成都电信产创平台
//    private void pushMessageToCDTelecom(String ccUid, String message, Long pushTime) {
//        try {
//            Map<String, Object> map = new HashMap<>();
//            map.put("userId", ccUid);//电信产创平台用户id
//            map.put("msg", message);//信息内容
//            map.put("pushTime", pushTime);//推送时间
//            map.put("channelId", BindChannelEnum.CD_TELECOM.getBindChannel());//渠道号
//            String paramsJson = JSON.toJSONString(map);
//            log.info("推送异常消息到成都电信产创平台==>产创userId：{}", ccUid);
//            String responst = HttpUrlClient.httpPostWithJSON(propsConfig.getCdtelecomErrormsgUrl(), paramsJson);
//        } catch (Exception e) {
//            log.error("pushMessageToCDTelecom error", e);
//        }
//    }
//
//    //推送消息到省电信乐智平台
//    private void pushMessageToLZ(String lzUid, String imei, String message) {
//        try {
//            JSONObject content = new JSONObject(true);
//            content.put("imei", imei);
//            content.put("content", message);//信息内容
//            content.put("timestamp", System.currentTimeMillis());//推送时间
//            content.put("messageType", 1);//渠道号
//            String contentJson = content.toJSONString();
//            log.info("推送异常消息到省电信乐智平台==>乐智userId：{},content:{}", lzUid, contentJson);
//            Map<String, String> paramMap = new HashMap<>();
//            paramMap.put("venderId", LezhiAesUtils.VENDERID);
//            paramMap.put("content", LezhiAesUtils.encryptStr(contentJson));
//            String url = propsConfig.getLzApiPrefix() + ApiSuffix.LZ_PUSHMESSAGE;
//            log.info("doGet请求地址:{}", url);
//            String responst = HttpUrlClient.doGet(url, paramMap);
//            log.info("pushMessageToLZ result:{}", responst);
//        } catch (Exception e) {
//            log.error("pushMessageToLZ error", e);
//        }
//    }
//
//    //推送消息到省电信乐智平台
//    private void pushMessageToSZT(User user, Message message) {
//        try {
//            JSONObject content = new JSONObject(true);
//            String imei = URLEncoder.encode(LezhiAesUtils.encryptStr(message.getStudentCardId()));
//            Date date = new Date(message.getPushTime());
//            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//            String pushTime = formatter.format(date);
//            content.put("url", "");
//            content.put("content", "家长您好，" + message.getContent());
//            content.put("alarmDate", pushTime);//报警时间（必传）
//            content.put("alarmAddress", message.getAdressName());//报警位置（必传）
//            content.put("alarmType", getReportContent(message.getType()));//报警类型（必传）
//            content.put("timestamp", message.getCreateTime());//时间戳，类型long用于防止多次推送
//            content.put("messageType", 1);//渠道号
//            String contentJson = content.toJSONString();
//            log.info("推送异常消息到省电信乐智平台==>乐智userId：{},content:{}", user.getOpenId(), contentJson);
////            String url = propsConfig.getLzApiPrefix() + ApiSuffix.LZ_PUSHMESSAGE + "appId=" + LezhiAesUtils.KEY + "&imei=" + imei;
//            String url = "https://edu.sctel.com.cn/lzapi/application/deviceMessage/wechatMessagePush?appId=" + LezhiAesUtils.KEY + "&imei=" + imei;
//            log.info("doGet请求地址:{}", url);
//            String responst = HttpUrlClient.httpPostWithJSON(url, contentJson);
//            log.info("pushMessageToLZ result:{}", responst);
//        } catch (Exception e) {
//            log.error("pushMessageToLZ error", e);
//        }
//    }
//
//    private String getReportContent(Integer type) {
//        if (MessageEnum.SOS.getType().equals(type)) {
//            return MessageEnum.SOS.getDesc();
//        } else if (MessageEnum.LONGSTAY.getType().equals(type)) {
//            return MessageEnum.LONGSTAY.getDesc();
//        } else if (MessageEnum.DEVIATIONTRAJECTORY.getType().equals(type)) {
//            return MessageEnum.DEVIATIONTRAJECTORY.getDesc();
//        } else if (MessageEnum.LEAVE_SECURITY_AREA.getType().equals(type)) {
//            return MessageEnum.LEAVE_SECURITY_AREA.getDesc();
//        } else if (MessageEnum.BACKTO_SECURITY_AREA.getType().equals(type)) {
//            return MessageEnum.BACKTO_SECURITY_AREA.getDesc();
//        } else if (MessageEnum.SYSTEMSETSUCCESS.getType().equals(type)) {
//            return MessageEnum.SYSTEMSETSUCCESS.getDesc();
//        } else if (MessageEnum.SYSTEMSETFAIL.getType().equals(type)) {
//            return MessageEnum.SYSTEMSETFAIL.getDesc();
//        } else if (MessageEnum.BLOOD_ERR.getType().equals(type)) {
//            return MessageEnum.BLOOD_ERR.getDesc();
//        } else if (MessageEnum.HEAT_RATE_ERR.getType().equals(type)) {
//            return MessageEnum.HEAT_RATE_ERR.getDesc();
//        } else if (MessageEnum.TEMP_ERR.getType().equals(type)) {
//            return MessageEnum.TEMP_ERR.getDesc();
//        } else if (MessageEnum.LOW_ELECTRICITY.getType().equals(type)) {
//            return MessageEnum.LOW_ELECTRICITY.getDesc();
//        } else if (MessageEnum.LEAVE_DANGER_AREA.getType().equals(type)) {
//            return MessageEnum.LEAVE_DANGER_AREA.getDesc();
//        } else if (MessageEnum.IN_DANGER_AREA.getType().equals(type)) {
//            return MessageEnum.IN_DANGER_AREA.getDesc();
//        } else if (MessageEnum.PASS_GATE_IN.getType().equals(type)) {
//            return MessageEnum.PASS_GATE_IN.getDesc();
//        } else if (MessageEnum.PASS_GATE_OUT.getType().equals(type)) {
//            return MessageEnum.PASS_GATE_OUT.getDesc();
//        } else if (MessageEnum.POWER_OFF.getType().equals(type)) {
//            return MessageEnum.POWER_OFF.getDesc();
//        }
//        return null;
//    }
//
//    ;
//
//    /**
//     * 发送校芯通模版消息
//     * @param content1  发送的 告警内容
//     * @param time  消息的 时间
//     * @param u 发送到的用户
//     * @return  是否成功
//     * @author yangs
//     */
//    private boolean doSendXxtTemplate(String content1, String address, String device, String time, User u){
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getOpenId());
//        jsonObject.put("template_id", xxtTemplateId);
//        jsonObject.put("url", xxtTemplateRedirectUrl);
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        first.put("value", "您的设备有新的告警信息");
//        first.put("color", "#173177");
//        JSONObject keyword1 = new JSONObject();
//        keyword1.put("value", content1);
//        keyword1.put("color", "#173177");
//        JSONObject keyword2 = new JSONObject();
//        keyword2.put("value", address);
//        keyword2.put("color", "#173177");
//        JSONObject keyword3 = new JSONObject();
//        keyword3.put("value", device);
//        keyword3.put("color", "#173177");
//        JSONObject keyword4 = new JSONObject();
//        keyword4.put("value", "一般");
//        keyword4.put("color", "#173177");
//        JSONObject keyword5 = new JSONObject();
//        keyword5.put("value", time);
//        keyword5.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "请尽快处理");
//        remark.put("color", "#173177");
//
//        data.put("first",first);
//        data.put("keyword1",keyword1);
//        data.put("keyword2",keyword2);
//        data.put("keyword3",keyword3);
//        data.put("keyword4",keyword4);
//        data.put("keyword5",keyword5);
//        data.put("remark",remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String params = jsonObject.toJSONString();
//            log.info("参数:{}", params);
//            string = WechatUtil.sendTemplateMsg(propsConfig.getAppID(), propsConfig.getAppsecret(), propsConfig.getTokenManager(), jsonObject);
//        } catch (Exception e) {
//            log.error("" , e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
}

// yangs old version
//    /**
//     * 发送模版消息 到 每个用户
//     * @param cardId 学生卡 id
//     * @param content1 发送消息 告警内容
//     * @param time  消息的时间
//     * @author yangs
//     */
//    private void sendTemplateToWx(String cardId, String content1, Long time){
//        List<User> users = authClient.getUsersByCardId(cardId);
//        if(null == users || users.isEmpty()){
//            log.error("发送用户 null 无需发送");
//            return;
//        }
//
//        String token = this.getToken();
//        if(StringUtils.isBlank(token)){
//            log.error("token null");
//            return;
//        }
//
//        String url = TEMPLATE_URL + token;
//        String t = DateUtil.long2String(time);
//        for(User u : users){
//            if(!"errandDog".equals(u.getAccountId())){
//                log.info("{} {}非跟班狗用户 不发", u.getId(), u.getNickName());
//                continue;
//            }
//            boolean flag = doSendTemplate(url, content1, t, u);
//            if(!flag){
//                //重试一次
//                log.info("{} {} 发送失败重试一次", u.getId(), u.getNickName());
//                doSendTemplate(TEMPLATE_URL + this.getToken(), content1, t, u);
//            }
//        }
//    }
//
//    /**
//     * 发送模版消息
//     * @param url 详情跳转地址
//     * @param content1  发送的 告警内容
//     * @param time  消息的 时间
//     * @param u 发送到的用户
//     * @return  是否成功
//     * @author yangs
//     */
//    private boolean doSendTemplate(String url, String content1, String time, User u){
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("touser", u.getOpenId());
//        jsonObject.put("template_id", templateId);
//        jsonObject.put("url", templateRedirectUrl);
//
//        JSONObject data = new JSONObject();
//        JSONObject first = new JSONObject();
//        first.put("value", "校芯通终端告警通知");
//        first.put("color", "#173177");
//        JSONObject content = new JSONObject();
//        content.put("value", content1);
//        content.put("color", "#173177");
//        JSONObject occurtime = new JSONObject();
//        occurtime.put("value", time);
//        occurtime.put("color", "#173177");
//        JSONObject remark = new JSONObject();
//        remark.put("value", "");
//        remark.put("color", "#173177");
//
//        data.put("first",first);
//        data.put("content",content);
//        data.put("occurtime",occurtime);
//        data.put("remark",remark);
//
//        jsonObject.put("data", data);
//
//        String string = null;
//        try {
//            String params = jsonObject.toJSONString();
//            log.info("参数:{}", params);
//            string = HttpUrlClient.httpPostWithJSON(url, params);
//        } catch (Exception e) {
//            log.error("" , e);
//        }
//        JSONObject result = JSON.parseObject(string);
//        log.info("发送模版{}响应:{}", u.getNickName(), result);
//        return (0 == result.getIntValue("errcode"));
//    }
//
//
//    /**
//     * 获取accessToken
//     * @return token
//     * @author yangs
//     */
//    private String getToken(){
//        String token = getCacheToken();
//        if(StringUtils.isNotBlank(token)){
//            log.info("已有token缓存");
//            return token;
//        }
//
//        synchronized (this){
//            token = getCacheToken();
//            if(StringUtils.isNotBlank(token)){
//                log.info("已有token缓存2");
//                return token;
//            }
//
//            /// 一般地址不会变，就没有提出来
//            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
//                    + errandDogAppId + "&secret=" + errandDogSecret;
//            log.info("获取token url：{}", url);
//
//            String response = HttpUrlClient.doGet(url, null);
//            log.info("getToken 响应: {}", response);
//            JSONObject json = JSON.parseObject(response);
//            String newToken = json.getString("access_token");
//            if (StringUtils.isNotBlank(newToken)) {
//                redisService.set(WX_TOKEN_KEY, 2600L, newToken);
//                return json.getString("access_token");
//            }
//        }
//        return "";
//    }
//
//    /**
//     * 获取缓存token
//     * @author yangs
//     * @return  token
//     */
//    private String getCacheToken(){
//        Object obj = redisService.get(WX_TOKEN_KEY, String.class);
//        return (null == obj ? "" : obj.toString());
//    }




